#pragma once

#include "Expression.hpp"
#include "Syntax/Token.hpp"

class ParenthesizedExpressionSyntax : public ExpressionSyntax {
public:
  ParenthesizedExpressionSyntax(SharedToken openParenthesisToken,
                                SharedExpression expression,
                                SharedToken closeParenthesisToken)
      : ExpressionSyntax(SyntaxKind::ParenthesizedExpression,
                         "ParenthesizedExpression"),
        OpenParenthesisToken(openParenthesisToken), Expression(expression),
        CloseParenthesisToken(closeParenthesisToken) {}

  std::vector<SharedNode> GetChildren() override {
    return {this->OpenParenthesisToken, this->Expression,
            this->CloseParenthesisToken};
  }

public:
  SharedToken OpenParenthesisToken;
  SharedExpression Expression;
  SharedToken CloseParenthesisToken;
};
